home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / 68343ffp.arc / FFPFPI.SA < prev    next >
Text File  |  1989-08-30  |  5KB  |  88 lines

  1.         TTL       FAST FLOATING POINT FLOAT TO INTEGER (FFPFPI)
  2. **************************************
  3. * (C) COPYRIGHT 1980 BY MOTORLA INC. *
  4. **************************************
  5.  
  6. ***********************************************************
  7. *            FAST FLOATING POINT TO INTEGER               *
  8. *                                                         *
  9. *      INPUT:  D7 = FAST FLOATING POINT NUMBER            *
  10. *      OUTPUT: D7 = FIXED POINT INTEGER (2'S COMPLEMENT)  *
  11. *                                                         *
  12. *  CONDITION CODES:                                       *
  13. *             N - SET IF RESULT IS NEGATIVE               *
  14. *             Z - SET IF RESULT IS ZERO                   *
  15. *             V - SET IF OVERFLOW OCCURRED                *
  16. *             C - UNDEFINED                               *
  17. *             X - UNDEFINED                               *
  18. *                                                         *
  19. *  REGISTER D5 IS DESTROYED                               *
  20. *                                                         *
  21. *  INTEGERS OF OVER 24 BIT PRECISION WILL BE IMPRECISE    *
  22. *                                                         *
  23. *  NOTE: MAXIMUM SIZE INTEGER RETURNED IF OVERFLOW        *
  24. *                                                         *
  25. *   CODE SIZE: 78 BYTES        STACK WORK AREA: 0 BYTES   *
  26. *                                                         *
  27. *      TIMINGS:  (8 MHZ NO WAIT STATES ASSUMED)           *
  28. *           COMPOSITE AVERAGE 15.00 MICROSECONDS          *
  29. *            ARG = 0   4.75 MICROSECONDS                  *
  30. *            ARG # 0   10.50 - 18.25 MICROSECONDS         *
  31. *                                                         *
  32. ***********************************************************
  33.          PAGE
  34.         XDEF      FFPFPI     ENTRY POINT
  35.         XREF      FFPCPYRT   COPYRIGHT NOTICE
  36.  
  37. FFPFPI  IDNT      1,1  FFP FLOAT TO INTEGER
  38.  
  39.         SECTION    9
  40.  
  41. FFPFPI  MOVE.B    D7,D5          SAVE SIGN/EXPONENT                4
  42.         BMI.S     FPIMI          BRANCH IF MINUS VALUE             8/10
  43.         BEQ.S     FPIRTN         RETURN IF ZERO                    8/10
  44.         CLR.B     D7             CLEAR FOR SHIFT                   4
  45.         SUB.B     #65,D5         EXPONENT-1 TO BINARY              8
  46.         BMI.S     FPIRT0         RETURN ZERO FOR FRACTION          8/10
  47.         SUB.B     #31,D5         ? OVERFLOW                        8
  48.         BPL.S     FPIOVP         BRANCH IF TOO LARGE               8/10
  49.         NEG.B     D5             ADJUST FOR SHIFT                  4
  50.         LSR.L     D5,D7          FINALIZE INTEGER                  8-70
  51. FPIRTN  RTS                      RETURN TO CALLER                  16
  52.  
  53. * POSITIVE OVERFLOW
  54. FPIOVP  MOVEQ     #-1,D7         LOAD ALL ONES
  55.         LSR.L     #1,D7          PUT ZERO IN AS SIGN
  56. *       OR.B      #$02,CCR       SET OVERFLOW BIT ON
  57.         DC.L      $003C0002     ****SICK ASSEMBLER****
  58.         RTS                      RETURN TO CALLER
  59.  
  60. * FRACTION ONLY RETURNS ZERO
  61. FPIRT0  MOVE.L    #0,D7          RETURN ZERO
  62.         RTS                      BACK TO CALLER
  63.  
  64. * INPUT IS A MINUS INTEGER
  65. FPIMI   CLR.B     D7             CLEAR FOR CLEAN SHIFT                 4
  66.         SUB.B     #$80+65,D5     EXPONENT-1 TO BINARY AND STRIP SIGN   8
  67.         BMI.S     FPIRT0         RETURN ZERO FOR FRACTION              8/10
  68.         SUB.B     #31,D5         ? OVERFLOW                            8
  69.         BPL.S     FPICHM         BRANCH POSSIBLE MINUS OVERFLOW        8/10
  70.         NEG.B     D5             ADJUST FOR SHIFT COUNT                4
  71.         LSR.L     D5,D7          SHIFT TO PROPER MAGNITUDE             8-70
  72.         NEG.L     D7             TO MINUS NOW                          6
  73.         RTS                      RETURN TO CALLER                      16
  74.  
  75. * CHECK FOR MAXIMUM MINUS NUMBER OR MINUS OVERFLOW
  76. FPICHM  BNE.S     FPIOVM         BRANCH MINUS OVERFLOW
  77.         NEG.L     D7             ATTEMPT CONVERT TO NEGATIVE
  78.         TST.L     D7             CLEAR OVERFLOW BIT
  79.         BMI.S     FPIRTN         RETURN IF MAXIMUM NEGATIVE INTEGER
  80. FPIOVM  MOVE.L    #0,D7          CLEAR D7
  81.         BSET.L    #31,D7         SET HIGH BIT ON FOR MAXIMUM NEGATIVE
  82. *       OR.B      #$02,CCR       SET OVERFLOW BIT ON
  83.         DC.L      $003C0002      ****SICK ASSEMBLER****
  84.         RTS                      AND RETURN TO CALLER
  85.  
  86.         END
  87.  
  88.